﻿/*
 * Сделано в SharpDevelop.
 * Пользователь: Eugenij
 * Дата: 29.01.2014
 * Время: 17:28
 * 
 * Для изменения этого шаблона используйте Сервис | Настройка | Кодирование | Правка стандартных заголовков.
 */
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace hwspeed
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            Icon = Configuration.MainIcon;
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
        
        
        void WorkWithPort(string sprt)
        {
            lvInformation.Items.Clear();
            Modem m = new Modem(sprt);
            string namemodem = "";
            string[] rs = m.AtCmd("ATI");
            foreach (var s in rs)
            {
                string[] ss = s.Split(":".ToCharArray(), 2);
                if (ss.Length == 2)
                {
                    var i = new ListViewItem(ss[0]);
                    i.SubItems.Add(ss[1]);
                    lvInformation.Items.Add(i);
                    if (ss[0] == "Model")
                        namemodem = ss[1];
                }
            }
            if (m.IsHuaweiE3131()){
                Icon ico = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
                btSelModem.Image = ico.ToBitmap();
                btSelModem.Text = string.Format("Модем найден!\nМодель:{0} на {1}\nМожно изменять настройки.", namemodem, m.ModemPort);
            }
            else
            {
                if (rs.Length > 0)
                    btSelModem.Text = string.Format("Модем не опознан!\nМодель:{0} на {1}\nНе изменяйте настройки если не уверенны что выбранное устройство поддерживает команды HUAWEI E3131.", namemodem, m.ModemPort);
                else
                    btSelModem.Text = string.Format("Порт {0} не отвечает!", m.ModemPort);
            }
            m.Reset();
        }
        
        void BtSelModemClick(object sender, EventArgs e)
        {
            if (Configuration.SelectModem(this))
            {
                WorkWithPort(Configuration.SelectedModem);
            }
        }
        
        void SelectModemToolStripMenuItemClick(object sender, EventArgs e)
        {
            if (Configuration.SelectPort(this))
            {
                WorkWithPort(Configuration.SelectedModem);
            }
        }
        
        void HelpToolStripMenuItemClick(object sender, EventArgs e)
        {
            Process myProcess = new Process();
            try
            {
                myProcess.StartInfo.UseShellExecute = true; 
                myProcess.StartInfo.FileName = "http://code.google.com/p/hwspeed/";
                myProcess.Start();
            }
            catch (Exception)
            {
            }
        }
        
        bool ConfirmSel()
        {
            if (Configuration.SelectedModem != null && Configuration.SelectedModem.Length > 0)
            {
                return true;
            }
            MessageBox.Show("Select modem or port before!");
            return false;
        }
        
        void AboutProgrammToolStripMenuItemClick(object sender, EventArgs e)
        {
            fmAbout ab = new fmAbout();
            ab.ShowDialog(this);
        }
        
        void ExitToolStripMenuItemClick(object sender, EventArgs e)
        {
            Close();
        }
        
        void ShowSignalToolStripMenuItemClick(object sender, EventArgs e)
        {
            if (ConfirmSel()){
                fmIndicator fi = new fmIndicator();
                fi.ShowDialog(this);
            }
        }
        
        void ATCommandsToolStripMenuItemClick(object sender, EventArgs e)
        {
            if (ConfirmSel()){
                fmAT fat = new fmAT();
                fat.ShowDialog(this);
            }
        }
        
        void ConfigPortToolStripMenuItemClick(object sender, EventArgs e)
        {
            Configuration.COMMCONFIG fcds = new Configuration.COMMCONFIG();
            fcds.dwSize = Marshal.SizeOf(fcds);
            Configuration.CommConfigDialog("COM1", this.Handle, ref fcds);
            return;
            if (ConfirmSel()){
                Configuration.ConfigPort(this);
                if (Configuration.CommConfig.dcbx.StopBits != 22)
                {
                    //Configuration.COMMCONFIG fcds = Configuration.CommConfig;
                    
                    return;
                }
            }
        }

        void Presets_handler(object sender, EventArgs e)
        {
            if (!ConfirmSel()){
                return;
            }
            try {
                List<string> atsl = ((sender as ToolStripMenuItem).Tag as List<string>);
                if (atsl != null && atsl.Count > 0){
                    if (MessageBox.Show(string.Format("Внимание!!!\nВыполнение несовместимых команд может повредить оборудование!!!\n" +
                                                      "Убедитесь что команды поддерживаются вашим модемом\n" +
                                                      "или отмените отправку!!!\n" +
                                                      "будут посланы следующие комманды:\n" +
                                                      "{0}", string.Join("\r\n", atsl)),"Выберите действие",MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes){
                        fmAT fa = new fmAT();
                        fa.SwitchMode(true);
                        fa.Show(this);
                        foreach (string s in atsl) fa.SendAT(s);
                        fa.SwitchMode(false);
                    }
                }
            }
            catch {}
        }
        
        void MainFormLoad(object sender, EventArgs e)
        {
            try {
                ToolStripMenuItem last = null;
                foreach (string s in File.ReadAllLines("presets.lst", System.Text.Encoding.UTF8))
                {
                    if (s[0] == '#')
                    {
                        if (last != null)
                        {
                            if (last.Tag != null)
                            {
                                 PRESETS.DropDownItems.Add(last);
                            }
                        }
                        last = new ToolStripMenuItem(s.Substring(1), null, new EventHandler(Presets_handler));
                        last.Tag = new List<string>();
                        continue;
                    }
                    if (last != null)
                    {
                        (last.Tag as List<string>).Add(s);
                    }
                }
                if (last != null)
                {
                    PRESETS.DropDownItems.Add(last);
                }

            } catch {}
            if (PRESETS.DropDownItems.Count > 1)
            {
                PRESETS.DropDownItems[0].Visible = false;
            }
        }
    }
}
